package cn.kais.drawer;

import cn.kais.drawer.menu.MenuDatePattern;
import cn.kais.drawer.menu.MenuTimePattern;
import org.apache.commons.lang3.StringUtils;

import java.awt.*;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class UnitUtil {

    /**
     * 生成对应数量的0 字符串
     *
     * @param n 0个数
     */
    public static String doCreateZeroStr(int n) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append('0');
        }
        return sb.toString();
    }

    /**
     * 字符串转 int
     * 如异常 则自动回0
     */
    public static int doStr2Int(String str) {
        try {
            return Integer.parseInt(str);
        } catch (Exception e) {
            return 0;
        }
    }

    /**
     * 颜色字符串 转 Color
     *
     * @param str rgba(255, 255, 255, 1)
     */
    public static Color toColor(String str) {
        if (StringUtils.isBlank(str)) {
            return new Color(0, 0, 0, 0);
        }
        String[] parts = str.replaceFirst("^rgba\\(", "").replaceFirst("\\)$", "").split(",");
        float[] rgba = new float[4];  // float 时 颜色值 在0~1范围内
        for (int i = 0; i < parts.length; i++) {
            rgba[i] = Float.parseFloat(parts[i].trim());
        }
        return new Color(rgba[0] / 255, rgba[1] / 255, rgba[2] / 255, rgba[3]);
    }

    /**
     * 颜色 转换 16进制 颜色值
     *
     * @param color 颜色
     */
    public static String onColor2Hex(Color color) {
        return String.format("#%06X", color.getRGB() & 0xFFFFFF);
    }

//    /**
//     * 颜色字符串 转16 进制颜色值
//     *
//     * @param str rgba(255, 255, 255, 1)
//     */
//    public static String toHexColor(String str) {
//        String[] parts = str.replaceFirst("^rgba\\(", "").replaceFirst("\\)$", "").split(",");
//        int[] rgba = new int[4];  // float 时 颜色值 在0~1范围内
//        for (int i = 0; i < parts.length; i++) {
//            rgba[i] = Integer.parseInt(parts[i].trim());
//        }
//        return String.format("#%02X%02X%02X%02X", 0xFF, rgba[0] & 0xFF, rgba[1] & 0xFF, rgba[2] & 0xFF);
//    }


    /**
     * 创建 font 字体
     *
     * @param name   字体名称
     * @param size   字体大小
     * @param bold   粗细
     * @param italic 斜体
     */
    public static Font toFont(String name, int size, boolean bold, boolean italic) {
        if (bold && italic) {
            return new Font(name, Font.BOLD | Font.ITALIC, size);
        } else {
            if (bold) return new Font(name, Font.BOLD, size);
            if (italic) return new Font(name, Font.ITALIC, size);
            return new Font(name, Font.PLAIN, size);
        }
    }

    /**
     * 获取当前时间
     *
     * @return 字符串类型
     */
    public static String doGetNowDate() {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return now.format(formatter);
    }

    /**
     * 时间字符串转Date类型
     *
     * @param time 时间字符串
     * @return date 时间
     */
    public static Date doStr2Date(String time) {
//        String dateTime1 = "2020-01-13T16:00:00.000Z";
//        String dateTime1 = time.replace("Z", " UTC");
//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
//        SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        try {
//            Date time1 = format.parse(dateTime1);
//            String result = defaultFormat.format(time1);
//            System.out.println(result);
//            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a");
//            LocalDateTime dateTime = LocalDateTime.parse(result, formatter);
//            return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
//        } catch (Exception e) {
////            e.printStackTrace();
//            return new Date();
//        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime dateTime = LocalDateTime.parse(time, formatter);
        return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * Date 类型转 日期 字符串
     */
    public static String doDate2Str(Date date, MenuDatePattern format) {
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        return localDateTime.format(DateTimeFormatter.ofPattern(format.format));
    }

    /**
     * Date 类型转 时间 字符串
     */
    public static String doDate2Str(Date date, MenuTimePattern format) {
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        return localDateTime.format(DateTimeFormatter.ofPattern(format.format));
    }

    /**
     * 替换分隔符
     */
    public static String doTakeTurnsTime(String time, String separator) {
        if (StringUtils.isNotBlank(separator)) {
            return time.replaceAll("-", separator).replaceAll(":", separator);
        }
        return time;
    }

}
